package com.urbainski.componentes.text
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	import mx.binding.utils.ChangeWatcher;
	import mx.controls.Alert;
	import mx.events.FlexEvent;
	import mx.events.ValidationResultEvent;
	
	import spark.components.TextInput;
	import spark.validators.NumberValidator;
	
	////////////////////////////////////////////////////////////
	// Componente MyNumberInput usado para caso onde         //
	// se precisa um número intero, sem casas decimais       //
	// casso precisse de casas decimais usar o componente    //
	// MyCurrencyInput                                       //
	//////////////////////////////////////////////////////////
	
	public class MyNumberInput extends TextInput
	{
		/**
		* @author Cristian Elder Urbainski
		* @since 28/12/2011
		 */
		
		//restricoes de digitacao do componente
		private var restrinct : String = "0123456789\\-";

		[Bindable] public var value : Number = new Number();
		
		//definicao do valor maximo e valor minimo que o campo aceitara
		private var _maxValue : int;
		private var _minValue : int;
		
		private var _requerido : Boolean;
		
		//carrinha responsavel por validações no componente
		private var numberValidator : NumberValidator;
		
		public function MyNumberInput()
		{
			super();
			
			super.restrict = this.restrinct;
			
			this.addEventListener(FlexEvent.VALUE_COMMIT, onValueCommitHandler);
			
			numberValidator = new NumberValidator();
			numberValidator.source = this;
			numberValidator.property = "text";
			numberValidator.required = _requerido;
			numberValidator.requiredFieldError = "Este campo é obrigatório";
			
			if(_maxValue){
				numberValidator.maxValue = _maxValue;
			}
			
			if(_minValue){
				numberValidator.minValue = _minValue;
			}
			
//			text = value.toString();
		}
		
		private function onVlaueChangedHandler(event : Event) : void {
			Alert.show("value Changerd");
		}
		
		private function onValueCommitHandler(event : FlexEvent) : void {
			if(!value){
				value = new Number();
			}
			
			try {
				value = new Number(text);
			} catch(error:Error) {
				
			}
		}
		
		public function get maxValue() : int {
			return _maxValue;
		}
		
		public function set maxValue(valor : int) : void {
			_maxValue = valor;
			
			if(numberValidator){
				numberValidator.maxValue = _maxValue;
				numberValidator.greaterThanMaxError = "O valor maximo é " + _maxValue;
			}
		}
		
		public function get minValue() : int {
			return _minValue;
		}
		
		public function set minValue(valor : int) : void {
			_minValue = valor;
			
			if(numberValidator){
				numberValidator.minValue = _minValue;
				numberValidator.lessThanMinError = "O valor minimo é " + _minValue;
			}
		}
		
		public function get requerido() : Boolean {
			return _requerido;
		}
		
		public function set requerido(value : Boolean) : void {
			if(value == _requerido){
				return;
			}
			
			_requerido = value;
			
			if(numberValidator != null){
				numberValidator.required = _requerido;
			}
		}

	}
}